package com.sxu.fighting.day1;

/**
 * 274
 */
public class Test6 {
    // 计数排序
    public int hIndex(int[] cs) {
        int n = cs.length;
        // 步骤1：创建计数数组（索引0~n）
        // cnt[i] :计数引用次数位i的文章有多少篇
        int[] cnt = new int[n + 10]; // +10为安全边界，实际n+1即可

        // 步骤2：统计各引用次数的论文数量
        for (int c : cs)
            cnt[Math.min(c, n)]++; // 处理超过n的引用次数

        // 步骤3：反向遍历寻找H指数
        int tot = 0; // 累计论文数量
        for (int i = n; i >= 0; i--) { // 从高引用次数向低遍历
            tot += cnt[i]; // 累加引用次数≥i的论文数量
            if (tot >= i) // 找到满足H指数条件的值
                return i;
        }
        return -1; // 理论上不会执行（至少会返回0）
    }
}
